/*

 * Copyright (c) 2017-2018, FastDev 刘强 (fastdev@163.com).

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */

package of.hotswapinject.attach.imp;

import of.hotswapinject.core.attach.IOnAttach;

import java.lang.instrument.Instrumentation;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryUsage;

public class AttachImp implements IOnAttach {
    @Override
    public void onAttach(String args, Instrumentation inst) {
        System.out.println("----------On Attach process--------:");
        System.out.println("Name:" + getProcessName() + ", ThreadId:" + Thread.currentThread().getId() + ",ThreadCount:" + getTheadCount() + ",memory:(" + getMemoryUsage() + ")");
    }

    private String getProcessName() {
        String name = ManagementFactory.getRuntimeMXBean().getName();
        return name;
    }

    private String getMemoryUsage() {
        MemoryUsage memoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
        return "init:" + memoryUsage.getInit() + ",max:" + memoryUsage.getMax() + ",used:" + memoryUsage.getUsed();
    }

    private int getTheadCount() {
        ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
        while(threadGroup.getParent() != null){
            threadGroup = threadGroup.getParent();
        }
        int totalThread = threadGroup.activeCount();
        return totalThread;
    }
}
